package cn.com.huzo.repository.trade;

import cn.com.huzo.model.entities.trade.ProductionInstructionLinesDestinationSchemaEntity;
import huzofw.repository.GenericRepository;
import java.util.List;
import java.util.Map;

/**
 * 生产指示书明细-按发货目的地分配产品数量数据访问对象接口。
 *
 * @author 吴旭
 */
public interface ProductionInstructionLinesDestinationSchemaRepository
        extends GenericRepository<ProductionInstructionLinesDestinationSchemaEntity, String> {

    /**
     * 根据给定的生产指示书标识，得到按发货目的地分配产品数量
     * <p>
     * @param headerId 生产指示书ID
     * @return 该生产指示书的按发货目的地分配产品数量
     */
    List<ProductionInstructionLinesDestinationSchemaEntity> fetchByHeaderId(Long headerId);

    /**
     * 根据新建明细行插入分配数据
     *
     * @param headerId 生产指示书ID
     * @return 影响的行数
     */
    Integer insertByNewLines(Long headerId);

    /**
     * 该生产指示书是否有按照发货地进行分配的数据
     *
     * @param headerId 生产指示书ID
     * @return
     */
    Integer fetchForCountForDestination(Long headerId);

    /**
     * 插入新的发货目的地
     *
     * @param criterion 包括：HeaderId,Destination,CreatedBy,UpdatedBy
     * @return 影响行数
     */
    Integer insertDestination(Map<String, Object> criterion);

    /**
     * 根据生产指示书明细标识删除
     *
     * @param parentLinesId 生产指示书明细标识
     * @return 影响的行数
     */
    Integer deleteByParentLinesId(String parentLinesId);

    /**
     * 删除该生产指示书发货目的地为空的分配数据
     *
     * @param headerId 生产指示书ID
     * @return 影响的行数
     */
    Integer deleteByNullDestination(Long headerId);

    /**
     * 得到生产计划时间节点
     *
     * @param headerId 生产指示书标识
     * @return
     */
    List<String> fetchScheduleDateNode(Long headerId);

    /**
     * 插入新的时间节点
     *
     * @param criterion 包括：HeaderId,DeliveryDate,CreatedBy,UpdatedBy
     * @return 影响行数
     */
    Integer insertDeliveryDate(Map<String, Object> criterion);

    /**
     * 编辑时间节点
     *
     * @param criterion 包括：HeaderId,OldDeliveryDate,NewDeliveryDate,UpdatedBy
     * @return 影响行数
     */
    Integer updateDeliveryDate(Map<String, Object> criterion);

    /**
     * 删除时间节点
     *
     * @param criterion 包括：HeaderId,DeliveryDate
     * @return 影响行数
     */
    Integer deleteDeliveryDate(Map<String, Object> criterion);
}
